package com.zm.demo.core.concurrent;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

import static java.lang.System.out;

/**
 * @author zoum
 * @create 2019/6/18 18:53
 */
public class SemaphoreDemo {

    public static void main(String[]args) throws Exception{
        Semaphore semaphore = new Semaphore(0);
        semaphore.release();
        semaphore.release();
        semaphore.release();
        semaphore.release();
        semaphore.release();
//        ExecutorService executorService = Executors.newCachedThreadPool();
//        executorService.submit(() -> {
//            try {
//                out.println("阻塞.");
//                Thread.sleep(3000L);
//                out.println("释放锁.");
//                semaphore.release();
//            } catch (Exception e){
//                e.printStackTrace();
//            }
//        });
//
//        semaphore.acquire();
//        out.println("获得锁.");
//
//
//        executorService.submit(() -> {
//            try {
//                out.println("获得锁.");
//                int i = 0;
//                while (true){
//                    out.println("获得锁." + (i++));
//                    if (semaphore.tryAcquire()){
//                        break;
//                    }
//
//                    Thread.sleep(100L);
//                }
//            } catch (Exception e){
//                e.printStackTrace();
//            }
//        });
//
//        executorService.submit(() -> {
//            try {
//                out.println("阻塞.");
//                Thread.sleep(3000L);
//                out.println("释放锁.1");
//                semaphore.release();
//            } catch (Exception e){
//                e.printStackTrace();
//            }
//        });
//
//
//
//        executorService.shutdown();

    }
}
